<?php
/**
 * Copyright (c) 2008-2011 Submit Consulting. Lima-Peru. All Right Reserved.
 * @author Ing. Angel Sullon M. (asullom@hotmail.com)
 * Created: 21.SEP.2000
 * Last Modify: 11.AGO.2011
 * Description of UsuarioData: CRUD
 */
class UsuarioData {

	public function create(Usuario $nuevo) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$tran->begin();
			//$qry=" select coalesce(max(cast(UsuarioId as SIGNED))+1,'1') as Id from Usuario ";
			$qry=" SELECT COALESCE(MAX(UsuarioId)+1,1) AS Id FROM Usuario ";
			$rs=mysql_query($qry) or die("<p class=error>".mysql_error()." table Usuario</p>");
			if( $row=mysql_fetch_array($rs) )
			$nuevo->setUsuarioId( $row["Id"] );
			$qry=" INSERT INTO Usuario
            	(UsuarioId,Foto,Nombres,Cargo,EMail,
            	Celular,Usuario,Clave,Privilegio,CuentaActiva,
            	ForzarClave,FechaAlta)
                values(?,?,?,?,?   ,?,?,?,?,?,  ?,now()) "; //str_to_date(?,'%d/%c/%Y')
			$pre = new PrepareQuery($qry);
			$pre->set($nuevo->getUsuarioId());
			$pre->set($nuevo->getFoto());
			$pre->set($nuevo->getNombres());
			$pre->set($nuevo->getCargo());
			$pre->set($nuevo->getEMail());
			$pre->set($nuevo->getCelular());
			$pre->set($nuevo->getUsuario());
			$pre->set($nuevo->getClave());
			$pre->set($nuevo->getPrivilegio());
			$pre->set($nuevo->getCuentaActiva());
			$pre->set($nuevo->getForzarClave());
			//$pre->set($nuevo->getFechaAlta());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
			$tran->commit();
		}catch(Exception $e){
			$tran->rollback();
			throw new GlobalException("UsuarioData.create ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function listByFilter($filter) {//CRUD create, reader, update, delete
		$tran= new ConnectDb();
		$tran->getConnection();
		$li=array();
		try{
			$qry=" SELECT u.UsuarioId,COALESCE(u.Foto,'SinFoto.jpg') as Foto,u.Nombres,u.Cargo,u.EMail,
            	u.Celular,u.Usuario,u.Clave,u.Privilegio,u.CuentaActiva,
            	u.ForzarClave,DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
                FROM Usuario u
                WHERE  UPPER(u.Nombres) LIKE UPPER(?)
                order by u.Nombres";
			$pre = new PrepareQuery($qry);
			$pre->set($filter."%");
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");
			$u=0;
			while( $row=mysql_fetch_array($rs) ) {
				$d=new Usuario();
				$d->setUsuarioId($row["UsuarioId"]);
				$d->setFoto($row["Foto"]);
				$d->setNombres($row["Nombres"]);
				$d->setCargo($row["Cargo"]);
				$d->setEMail($row["EMail"]);
				$d->setCelular($row["Celular"]);
				$d->setUsuario($row["Usuario"]);
				$d->setClave($row["Clave"]);
				$d->setPrivilegio($row["Privilegio"]);
				$d->setCuentaActiva($row["CuentaActiva"]);
				$d->setForzarClave($row["ForzarClave"]);
				$d->setFechaAlta($row["FechaAlta"]);
				$li[$u++]=$d;
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("UsuarioData.listByFilter ".$e->getMessage());
		}
		$tran->close();
		return $li;
	}

	public function findByPk($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$d=new Usuario();
		try{
			$qry=" SELECT u.UsuarioId,COALESCE(u.Foto,'SinFoto.jpg') as Foto,u.Nombres,u.Cargo,u.EMail,
            	u.Celular,u.Usuario,u.Clave,u.Privilegio,u.CuentaActiva,
            	u.ForzarClave,DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
                FROM Usuario u
                WHERE  u.UsuarioId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");;
			if( $row=mysql_fetch_array($rs) ) {
				$d->setUsuarioId($row["UsuarioId"]);
				$d->setFoto($row["Foto"]);
				$d->setNombres($row["Nombres"]);
				$d->setCargo($row["Cargo"]);
				$d->setEMail($row["EMail"]);
				$d->setCelular($row["Celular"]);
				$d->setUsuario($row["Usuario"]);
				$d->setClave($row["Clave"]);
				$d->setPrivilegio($row["Privilegio"]);
				$d->setCuentaActiva($row["CuentaActiva"]);
				$d->setForzarClave($row["ForzarClave"]);
				$d->setFechaAlta($row["FechaAlta"]);
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("UsuarioData.findByPk ".$e->getMessage());
		}
		$tran->close();
		return $d;
	}

	public function update(Usuario $dato) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" UPDATE Usuario SET
                Foto = ?,Nombres = ?,Cargo = ?,EMail = ?,
            	Celular = ?,Usuario = ?,Clave = ?,Privilegio = ?,CuentaActiva = ?,
            	ForzarClave = ?
                WHERE UsuarioId=?";
			$pre = new PrepareQuery($qry);
			$pre->set($dato->getFoto());
			$pre->set($dato->getNombres());
			$pre->set($dato->getCargo());
			$pre->set($dato->getEMail());
			$pre->set($dato->getCelular());
			$pre->set($dato->getUsuario());
			$pre->set($dato->getClave());
			$pre->set($dato->getPrivilegio());
			$pre->set($dato->getCuentaActiva());
			$pre->set($dato->getForzarClave());
			$pre->set($dato->getUsuarioId());
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("UsuarioData.update ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function delete($id) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$r=0;
		try{
			$qry=" DELETE FROM Usuario WHERE UsuarioId=? ";
			$pre = new PrepareQuery($qry);
			$pre->set($id);
			mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");;
			$r=mysql_affected_rows();
		}catch(Exception $e){
			throw new GlobalException("UsuarioData.delete ".$e->getMessage());
		}
		$tran->close();
		return $r;
	}

	public function autenticate($username, $password) {
		$tran= new ConnectDB();
		$tran->getConnection();
		$d=null;
		$crypt=new CryptoString();
		try{
			$qry=" SELECT u.Usuario,u.Clave
                FROM Usuario u
                WHERE  u.Usuario=?";
			$pre = new PrepareQuery($qry);
			$pre->set($username);
			$rs=mysql_query($pre->getQuery()) or trigger_error("<p class=error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");
			if( $row=mysql_fetch_array($rs) ) {
				$qry=" SELECT u.UsuarioId,COALESCE(u.Foto,'SinFoto.jpg') as Foto,u.Nombres,u.Cargo,u.EMail,
            		u.Celular,u.Usuario,u.Clave,u.Privilegio,u.CuentaActiva,
            		u.ForzarClave,DATE_FORMAT(u.FechaAlta, '%d/%c/%Y') as FechaAlta
              	  	FROM Usuario u
              		WHERE  u.Usuario=? and CuentaActiva='Si'";
				$pre = new PrepareQuery($qry);
				$pre->set($username);
				$rs2=mysql_query($pre->getQuery()) or trigger_error("<p class=Error>".mysql_error()." table Usuario", E_USER_ERROR. "</p>");
				if( $row=mysql_fetch_array($rs2) ) {
					$clave=$crypt->decrypt( $row["Clave"] );
					if( $clave==$password )
				    {
						$d=new Usuario();
						$d->setUsuarioId($row["UsuarioId"]);
						$d->setNombres($row["Nombres"]);
						$d->setCargo($row["Cargo"]);
						$d->setEMail($row["EMail"]);
						$d->setCelular($row["Celular"]);
						$d->setUsuario($row["Usuario"]);
						$d->setClave($row["Clave"]);
						$d->setPrivilegio($row["Privilegio"]);
						$d->setCuentaActiva($row["CuentaActiva"]);
						$d->setForzarClave($row["ForzarClave"]);
						$d->setFechaAlta($row["FechaAlta"]);
						return $d;
					}
					else
					{
						trigger_error("<p calss=Error>UsuarioData.autenticate Alert: la clave no es v�lida!", E_USER_ERROR. "</p>");
					}
				}else{
					trigger_error("<p calss=Error>UsuarioData.autenticate Alert: la cuenta no esta activa!", E_USER_ERROR. "</p>");
				}
				mysql_free_result($rs2);
			}else {
				trigger_error("<p calss=Error>UsuarioData.autenticate Alert: el usuario ".$username." no existe!", E_USER_ERROR. "</p>");
			}
			mysql_free_result($rs);
		}catch(Exception $e){
			throw new GlobalException("UsuarioData.autenticate ".$e->getMessage());
		}
		$tran->close();
		return null;
	}


}
?>